import Vue from 'vue'
import Router from 'vue-router'
import approval from './modules/approval'
import attendance from './modules/attendance'
import department from './modules/department'
import employee from './modules/employee'
import permission from './modules/permission'
import role from './modules/role'
import salary from './modules/salary'
import social from './modules/social'
Vue.use(Router)

/* Layout */
import Layout from '@/layout'

// 默认大家都拥有这个规则
export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),   // 懒加载
    hidden: true,   // 确认需要隐藏
    // meta: { title: '登录', icon: 'bug' }
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true //  是否再左侧菜单栏隐藏
    // meta: { title: '404', icon: 'edit' }
  },

  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    // hidden: true, 不对 菜单的控制不能这样(因为这样这是隐藏了菜单 路由规则还在) ==>> 页面权限的控制 核心是 路由规则的有无
    children: [{
      path: 'dashboard',
      name: 'Dashboard', // 命名路由
      component: () => import('@/views/dashboard/index'),
      meta: { title: '首页', icon: 'dashboard' }
    }]
  },
  // 如果按照常规的写法 所有的业务页面如首页 组织 角色 员工等都得写一起, 而且每个业务仅仅只有一个页面
  // 好维护 希望所有的子页面单独成一级
  // 拆出来的代价: 先展示一级layout 在通过子路由去展示二级 首页 组织 角色 员工
  // {
  //   path: '/ff',
  //   component: Layout,
  //   children:[{
  //     path:'',
  //     component:()=> import ('@/views/dashboard/index')
  //   }]
  // },
 
 


 
  // 404 page must be placed at the end !!!
  // { path: '*', redirect: '/404', hidden: true }
]

// 需要用权限去控制的规则数组
export const asyncRoutes=[
  department,
  role,
  employee,
  permission,
  approval,
  attendance,
  salary,
  social,
]
const createRouter = () => new Router({
  // mode: 'history', // require service support
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
// 重置路由
export function resetRouter() {
  const newRouter = createRouter()  /// 得到一个新的路由实例
  // 将新的路由实例的matcher赋值给旧的路由实例
  // newRouter.matcher 是什么 =>matcher是一个对象 里面有addRoutes和getRoutes方法
  router.matcher = newRouter.matcher // reset router
}

// 原始写法
// const routers = new Router({
//   routers:[
//     {
//       path:'/login',
//       component:()=>import('@/views/login/index'),
//       hidden:true
//     }
//   ]
// })

export default router
